home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 1 / CU Amiga Magazine CD-ROM Special Edition (1995)(EMAP Images)(GB)[Issue 1995-11].iso / Aminet / biz / demo / StylusDemo.lha / Stylus_Demo / REXX / MovePts.pvrx < prev    next >
Text File  |  1992-03-24  |  3KB  |  143 lines

  1. /* MovePts.pvrx---move selected points by precise increments
  2.     in the X or Y axis.
  3.    Author:  Jeff Blume - August 28, 1991
  4.    Copyright © 1991 by Stylus, Inc.
  5.    Suggested "ProVector.pvrx" entries:
  6.  
  7.     'Define "MovePts    Ctrl-E" "MovePts MENU"'
  8.     'DefineKey E "MovePts MENU"'
  9.  
  10.     (Control-E for "Edit" ???)
  11. */
  12.  
  13. address "ProVector"
  14.  
  15. /* Get the argument list to see whether this is a MENU, or an OK */
  16. arg arglist
  17. Cmd = word(arglist,1)
  18.  
  19. options results
  20.  
  21. /* Try to get exclusive lock on project window.
  22.     If can't get lock, not polite to interrupt. */
  23. 'Lock'
  24. if RC ~= 0 then exit
  25.  
  26. /* This loop is called from the menu */
  27. if Cmd = 'MENU' then
  28. DO
  29.     /* Test Selected list for magnetized? */
  30.     /* Magnetize Sel Objs for better coord identification.*/
  31.     'SelectList' Sel; SelN = Result
  32.     if SelN = 0 then do
  33.         RC = 100
  34.         call Error "NO OBJECT SELECTED!"
  35.     end
  36.     else do
  37.         'Magnetize' SelN Sel
  38.         do i = 0 to SelN-1
  39.             'SelectObj'  Sel.i /* restore selection state */
  40.         end
  41.     end
  42.     'GetBool "Click points; Double Last" "OK" "OK"'
  43.     'GetUserData 0 1 100 "MovePts OK" ""'
  44. END
  45. /* end "MENU" loop */
  46.  
  47. /* This was called from GetUserData */
  48. if Cmd = 'OK' then
  49. DO
  50.     'GetInputPoints Pts'; NumIn=Result
  51.     'SelectList' Sel; SelN = Result
  52.     'PushUndo'
  53.  
  54.     /* Get X and Y shifts */
  55.     'GetStr "Move X - Move Y (N1 N2)" "OK" "CANCEL"' /* longest prompt */
  56.     MCoords = result
  57.     if rc ~= 0 | words(MCoords) ~= 2 then do
  58.         RC = 100
  59.         call Error "MACRO CANCELED OR BAD COORDS GIVEN"
  60.         end
  61.     /* extract the X and Y values */
  62.     MX = subword(MCoords,1,1)
  63.     MY = subword(MCoords,2,1)
  64.  
  65.     'Prompt "Looking for points."'
  66.     NumModObjs = 0 /* counter for Objects to be modified */
  67.     ModObj.0 = 0        /* index for Objects to be modified */
  68.     do i=0 to SelN-1
  69.         /* Identify points to be moved */
  70.         'GetPoints' Sel.i ObjPts.i; NumPts.i=Result
  71.         if RC = 18 then
  72.             do
  73.                 'GetBool "CAN NOT MOVEPT TEXT OR GROUP" "Cancel" "Cancel"'
  74.                 iterate
  75.             end
  76.         do p=0 to NumIn-1
  77.             call MatchPoint
  78.         end
  79.     end
  80.     'EndPrompt'
  81.  
  82.     if NumModObjs = 0 then do
  83.         RC = 100
  84.         call Error "NO LEGAL OBJECTS SELECTED!"
  85.         end
  86.  
  87.     'Prompt "Moving points!"'
  88.     do m=1 to NumModObjs
  89.         'SaveUndo' ModObj.m
  90.         'ChangePoints' ModObj.m ModNum.m ModPts.m
  91.     end
  92.     'EndPrompt'
  93.  
  94.     /* De-Magnetize, general cleanup */
  95.     'Magnetize' 0 Sel
  96.     'Repair'
  97. END
  98. /* end "OK" loop */
  99.  
  100. 'UnLock'
  101. EXIT
  102.  
  103. ERROR:
  104.     arg ErrTxt
  105.     if RC ~= 0 & ErrTxt ~= "" then 'GetBool ErrTxt "Cancel" "Cancel"'
  106.     'Magnetize' 0 Sel
  107.     'EndPrompt'
  108.     /*'Repair'*/
  109.     'UnLock'
  110.     exit
  111.  
  112. MATCHPOINT:
  113.     do j = 0 to NumPts.i-1
  114.         select
  115.             when ObjPts.i.j.X = Pts.p.X & ObjPts.i.j.Y = Pts.p.Y then
  116.                 do
  117.                     ObjPts.i.j.X = ObjPts.i.j.X + MX
  118.                     ObjPts.i.j.Y = ObjPts.i.j.Y + MY
  119.                     call CmpModObj
  120.                 end
  121.             when j = NumPts.i-1 then return    /* Test next obj */
  122.             otherwise iterate
  123.         end
  124.     end
  125.     return
  126.  
  127. CMPMODOBJ:
  128.     /* Compare current obj to list of objs to be modified */
  129.     do c=0 to NumModObjs
  130.         select
  131.             when Sel.i = ModObj.c then leave c    /* same as last ModObj */
  132.             when Sel.i ~= ModObj.c & c = NumModObjs then    /* not on list */
  133.                 do
  134.                     NumModObjs = NumModObjs + 1    /* increment number */
  135.                     ModObj.NumModObjs = Sel.i        /* add to list */
  136.                     ModPts.NumModObjs = ObjPts.i
  137.                     ModNum.NumModObjs = NumPts.i
  138.                 end
  139.             otherwise iterate
  140.         end
  141.     end
  142.     return
  143.